package com.yuanian.ecsplus.converter;

import com.yuanian.ecsplus.exception.EcsPlusException;
import com.yuanian.ecsplus.context.ReflectContext;
import com.yuanian.ecsplus.utils.DateUtils;
import java.util.Date;

/**
 * 日期类型的转换器
 */
public class DateTypeConverter implements TypeConverter {

    @Override
    public Object obj2Map(ReflectContext reflectContext) {
        if (reflectContext.getObject() == null || reflectContext.getField() == null) {
            return null;
        }
        try {
            Object fieldObj = reflectContext.getRawResult();
            if (fieldObj != null) {
                return DateUtils.toStr((Date)fieldObj);
            }
            return null;
        } catch (IllegalAccessException e) {
            throw new EcsPlusException(e.getCause());
        }
    }

    @Override
    public Object map2Obj(ReflectContext reflectContext) {
        if (reflectContext.getMap() == null || reflectContext.getField() == null) {
            return null;
        }
        Object propData = reflectContext.getMapData();
        if (propData == null) {
            return null;
        } else if (propData instanceof String) {
            String str = (String)propData;
            if (str.trim().length() < 9) {
                if (str.trim().length() == 0) {//""代表是null
                    return null;
                }
                throw new EcsPlusException(str + "日期格式错误");
            }
            return DateUtils.toDate(str);
        } else {
            return propData instanceof Date ? propData : null;
        }
    }

}
